package com.firebird.fejpsl;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.firebird.fejpsl.configuration.property.SystemConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @author firebird
 */
@SpringBootApplication
@EnableTransactionManagement
@EnableConfigurationProperties(value = { SystemConfig.class})
@EnableCaching
public class FejpslApp {

    public static void main(String[] args) {
        disableAccessWarnings();
        SpringApplication.run(FejpslApp.class, args);
    }

    /**忽略非法反射警告  适用于jdk11**/
    @SuppressWarnings("unchecked")
    public static void disableAccessWarnings(){
        try{
            Class unsafeClass=Class.forName("sun.misc.Unsafe");
            Field field=unsafeClass.getDeclaredField("theUnsafe");
            field.setAccessible(true);
            Object unsafe=field.get(null);

            Method putObjectVolatile=unsafeClass.getDeclaredMethod("putObjectVolatile", Object.class, long.class, Object.class);
            Method staticFieldOffset=unsafeClass.getDeclaredMethod("staticFieldOffset", Field.class);
            Class loggerClass=Class.forName("jdk.internal.module.IllegalAccessLogger");
            Field loggerField=loggerClass.getDeclaredField("logger");
            Long offset=(Long) staticFieldOffset.invoke(unsafe,loggerField);
            putObjectVolatile.invoke(unsafe,loggerClass,offset,null);
        }catch (Exception ignored){}
    }
}
